iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
自我挑戰組

寫遊戲初體驗系列 第 25

Day 25 Particle System 01

  • 分享至 

  • xImage
  •  

Particle System

一款遊戲,如果少了點特效,那肯定是會覺得少了點啥,所以今天打算來製作 Particle System,讓我們能有一些火焰之類的效果可以使用。

當然我會用 ECS 的架構去且我的 Particle System。而且我希望我的 Particle System 可以透過微調參數就能達到各種效果。

雖說今天開始做,但實際上我已經先偷跑了一會兒,所以先給大家看看最終會長得如何吧。

那就讓我們開始吧

甚麼是 Particle System

如果我們角色要移動或攻擊的時候有動畫,一般我們會去變換角色的 sprite 來達到動畫的效果,那我們通常會把要用到的所有 sprite 放到同一張裡面,稱作 sprite sheet,像這樣。

那如果今天想要用火焰的效果怎麼辦?

如果你的遊戲效果多的話,你的繪師可能會畫到死。而且如果今天要做的是3D遊戲呢?

Particle System 就是用來模擬各種不同的效果。有了 Particle System,我們不再需要畫各種時態的效果,我們只需要最基本粒子的Texture就可以了。整個系統會幫我們渲染例子,模擬效果及物理並釋放粒子。

Particle System 的組件

emitter

emitter 是用來激活 Particle 以及定義 Particle 行為的地方,主要負責的有

  • 控制每個 frame 激活數量
  • 激活時的位置
  • particle 的速度
  • particle 的生命週期
  • 其他屬性(顏色, 大小等等)

emitter 會存有 particle pool,也就是所有的 particle。而 emitter 所有的數據都會賦予給這些 particle 讓他們模擬我們要的行為。更改 emitter 的數據就能改變 particle 的行為。

particles

先在我們要說效果的基本單位,也就是 particle。particle僅僅是一個在螢幕上移動的 texture而已。
而 particle 的 texture 通常都會用黑白的圖片,像這樣。

particle 的屬性其實沒有硬性規定,你想要設定甚麼屬性就設計甚麼屬性。

以下是 Unity 的屬性。

他們的屬性真的很多,但我們沒有要做成這樣,有他的十分之一就好XD。

目標

好那就來說說我們要做的目標

  • 2D
  • particle 的移動會是線性
  • 所有的數據會存在 Json 檔裏
  • 用 ECS 架構
  • 各種不同的 emitter
  • 各種屬性
    • angle
    • rotate speed
    • particle speed
    • particle size
    • emission rate
    • particle texture
    • particle color
    • emitter life
  • 能簡單的產生emitter
    auto emit = registry.create();
    registry.emplace<TransformComponent>(emit, glm::vec2(sf::Mouse::getPosition(window_).x, sf::Mouse::getPosition(window_).y), glm::vec2(100.f, 100.f));
    registry.emplace<ParticleSystem>(emit, ResourceManager::getTexture("texture"), data);
    

剩下的明天繼續吧~


上一篇
Day 24 EnTT
下一篇
Day 26 Particle System 2
系列文
寫遊戲初體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言